package com.demo.demo.images;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class AddPriceTags {

    public static void main(String[] args) throws IOException {
//        BufferedImage image = new BufferedImage(400, 400, BufferedImage.TYPE_INT_ARGB);
//        URL url = new URL("https://pic.616pic.com/photoone/00/07/29/619762ba2cace5236.jpg");
        File file = new File("D:\\WorkSpace\\wu\\spring-boot-study\\springboot-demo\\src\\main\\resources\\scene2.png");
        BufferedImage image = ImageIO.read(file);
        // 获取图像的绘制上下文
//        Graphics2D g2d = image.createGraphics();

        // 缩放图片
        int desiredWidth = 220;
        int desiredHeight = 135;
        BufferedImage resizedImage = new BufferedImage(desiredWidth, desiredHeight, image.getType());
        Graphics2D g2d = resizedImage.createGraphics();
        g2d.drawImage(image, 0, 0, desiredWidth, desiredHeight, null);
        g2d.dispose();

        // 获取Graphics2D对象
        g2d = (Graphics2D) resizedImage.getGraphics();
        // 设置字体和颜色

        Font font = new Font("宋体", Font.BOLD, 130);
        Color textColor = Color.WHITE;
        Color textColor1 = Color.WHITE;
        Color textColor2 = Color.BLACK;
        Color redBackgroundColor = new Color(201, 17, 47);
        Color stripedBackgroundColor = Color.WHITE;
        // 第一个价格标签，红色背景
        g2d.setFont(font);
        String price1 = "活动价:¥102.99";
        //横坐标
//        int x1 = image.getWidth() - g2d.getFontMetrics().stringWidth(price1) - 20;
        int x1 = 100;
        //纵坐标
        int y1 = 270;
//        int x1 = image.getWidth() - 120;
//        int y1 = 30;
        addPriceTag(g2d, price1, x1, y1, font, textColor1, redBackgroundColor, false);
        Font font2 = new Font("宋体", Font.BOLD, 110);
        // 第二个价格标签，带有划线和白色背景
        String price2 = "吊牌价:¥122.99";
        int x2 = x1 + 100;
//        int y2 = 60;
        int y2 = y1 + 360;
        addPriceTag(g2d, price2, x2, y2, font2, textColor2, stripedBackgroundColor, true);

        // 保存图像
        // TODO: 将文件路径替换为您要保存的位置
        File outputImageFile = new File("qiwei/output2.png");
        try {
            ImageIO.write(image, "png", outputImageFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 添加一个价格标签到图像上的指定位置。
     *
     * @param g2d 绘制上下文
     * @param price 价格
     * @param x 标签左上角的x坐标
     * @param y 标签左上角的y坐标
     * @param font 字体
     * @param textColor 文字颜色
     * @param backgroundColor 背景颜色
     * @param drawLine 是否绘制删除线
     */
    private static void addPriceTag(Graphics2D g2d, String price, int x, int y,
                                    Font font, Color textColor, Color backgroundColor, boolean drawLine) {
        // 获取字体度量值
        FontMetrics fm = g2d.getFontMetrics(font);
        int textWidth = fm.stringWidth(price);
        // 计算背景大小和位置

        //标签的宽度
        int width1 = textWidth + 40;
        //标签的高度
        int height1 = 60;

        // 绘制背景
//        g2d.setColor(backgroundColor);
//        if (drawLine) {
//            g2d.fillRect(x - 18, y - 35, width1, height1 - 10);
//        }else {
//            g2d.fillRect(x - 18, y  - 45, width1, height1 + 15);
//        }

        // 绘制文字
        g2d.setFont(font);
        g2d.setColor(textColor);
        g2d.drawString(price, x + 5, y - 3);
        // 绘制删除线
        if (drawLine) {
            g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
            g2d.drawLine(x + 400, y - 30, x + textWidth + 5, y - 30);

        }
    }


    /**
     * 添加一个价格标签到图像上的指定位置。
     *
     * @param g2d 绘制上下文
     * @param price 价格
     * @param x 标签左上角的x坐标
     * @param y 标签左上角的y坐标
     * @param font 字体
     * @param textColor 文字颜色
     * @param backgroundColor 背景颜色
     * @param drawLine 是否绘制删除线
     */
    private static void addPriceTags(Graphics2D g2d, String price, int x, int y,
                                    Font font, Color textColor, Color backgroundColor, boolean drawLine) {
        // 获取字体度量值
        FontMetrics fm = g2d.getFontMetrics(font);
        int textWidth = fm.stringWidth(price);
        int textHeight = fm.getAscent() - fm.getDescent();

        // 计算背景大小和位置
        int padding = 5;
        int bgWidth = textWidth + 2 * padding;
        int bgHeight = textHeight + 2 * padding;
        int bgX = x - bgWidth;
        int bgY = y;

        // 绘制背景
        g2d.setColor(backgroundColor);
        g2d.fillRect(bgX, bgY, bgWidth, bgHeight);

        // 绘制文字
        g2d.setFont(font);
        g2d.setColor(textColor);
        g2d.drawString(price, bgX + padding, bgY + padding + textHeight);

        // 绘制删除线
        if (drawLine) {
            int lineY = bgY + padding + textHeight / 2;
            g2d.setColor(textColor);
            g2d.drawLine(bgX + padding, lineY, bgX + padding + textWidth, lineY);
        }
    }
}


